package data;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

import domain.VentaRepository;
import util.VentaDTO;
import util.VentaAssembler;
import domain.Venta;

public class VentaRepositoryDAOImpl implements VentaRepository {
 
 private VentaDAO dao;
 
 /** 
   * Constructor  
   * @version 1, 5/10/2014
   * @param objeto DAO con todas las funciones necesarias IMEC para ser ejecutadas en la base de datos.
   */
 VentaRepositoryDAOImpl(VentaDAO dao) {
   this.dao = dao;
 }
 

 /** 
   * 
   * Implementacion del metodo insert de la interfaz, esta
   * sera ejecutada en la base de datos mediante el objeto DAO.     
   * @version 1, 5/10/2014
   * @param object Objeto de tipo banda con la información necesaria para crear el DTO.
   * @return true de completarse la operacion.
   */
 public boolean insert(Venta obj) {
   VentaDTO dto = VentaAssembler.createDTO(obj);
   return (dao.insert(dto));
 }
 
 /** 
   * 
   * Implementacion del metodo delete de la interfaz, esta
   * sera ejecutada en la base de datos mediante el objeto DAO.     
   * @version 1, 5/10/2014
   * @param object Objeto de tipo banda 
   * @return true de completarse la operacion.
   */
 public boolean delete(Venta obj) {
   VentaDTO dto = VentaAssembler.createDTO(obj);
   return (dao.delete(dto));
 }
 
 /** 
   * 
   * Implementacion del metodo find de la interfaz, esta
   * sera ejecutada en la base de datos mediante el objeto DAO.     
   * @version 1, 5/10/2014
   * @param id del objeto que se busca 
   * @return objeto con la informacion recuperada de la base de datos.
   */
 public Venta find(int id) {
   VentaDTO dto = dao.getById(id);
   if (dto!=null) {
     Venta obj = new Venta();
     VentaAssembler.update(obj,dto);
     return obj;
   }
   return null;
 }
 
 /** 
   * 
   * Implementacion del metodo update de la interfaz, esta
   * sera ejecutada en la base de datos mediante el objeto DAO.     
   * @version 1, 5/10/2014
   * @param objeto con la informacion que sera actualizada. 
   * @return verdadero de ejecutarse la accion correctamente.
   */
 public boolean update(Venta obj) {
   VentaDTO dto = VentaAssembler.createDTO(obj);
   return (dao.update(dto));
 }
 
 /** 
   * 
   * Implementacion del metodo findAll de la interfaz, esta
   * sera ejecutada en la base de datos mediante el objeto DAO.     
   * @version 1, 5/10/2014   
   * @return un objeto Collection con todos los datos de la tabla.
   */
 public Collection findAll() {
   Collection dtos = dao.findAll();
   List objList = new ArrayList();
   Iterator itr = dtos.iterator();
   while (itr.hasNext()) {
     Venta obj = new Venta();
     VentaDTO dto = (VentaDTO)itr.next();
     VentaAssembler.update(obj,dto);
     objList.add(obj);
   }
   return objList;
 }
}